package application;

import javafx.collections.FXCollections;
import javafx.scene.control.Pagination;
import javafx.scene.control.TableView;

public class TableWithPaginationAndSorting<T> {
    private Page<T> page;
    private TableView<T> tableView;
    private Pagination tableViewWithPaginationPane;
    
    /** getter **/

    public TableWithPaginationAndSorting(Page<T> page, TableView<T> tableView) {
        this.page = page;
        this.tableView = tableView;
        tableViewWithPaginationPane = new Pagination();
        tableViewWithPaginationPane.pageCountProperty().bindBidirectional(page.getTotalPageProperty());
        updatePagination();
    }

    private void updatePagination() {
        tableViewWithPaginationPane.setPageFactory(pageIndex -> {
            tableView.setItems(FXCollections.observableList(page.getCurrentPageDataList(pageIndex)));
            return tableView;
        });
    }

	public Page<T> getPage() {
		return page;
	}

	public void setPage(Page<T> page) {
		this.page = page;
	}

	public TableView<T> getTableView() {
		return tableView;
	}

	public void setTableView(TableView<T> tableView) {
		this.tableView = tableView;
	}

	public Pagination getTableViewWithPaginationPane() {
		return tableViewWithPaginationPane;
	}

	public void setTableViewWithPaginationPane(Pagination tableViewWithPaginationPane) {
		this.tableViewWithPaginationPane = tableViewWithPaginationPane;
	}
    
    
}